A virtual machine (VM) is a computer-generated machine that exists in a virtual world and that functions like a physical machine, including running its own applications and operation system (OS). A VM is composed of software and contains no hardware components. However, each VM generally has software-based components that correspond to hardware components of a physical machine. For example, in addition to the application and OS layers, a VM usually has a resource layer comprising resources such as a virtual central processing unit (CPU), a virtual random access memory (RAM), a virtual hard disk (HD), a virtual network interface card (NIC), and so on, much like a typical data processing system or computer.
Today, multiple VMs may run on a single physical machine and share the underlying physical machine resources. Since each VM may run its own OS in an isolated computing environment, multiple OS environments can co-exist on the same computer. The software layer providing the virtualization is called a virtual machine monitor or manager (VMM). Using a VMM, virtual machines can be provisioned, replicated, and migrated from one physical machine to another. However, current approaches of provisioning/re-provisioning virtual machines (VMs) can be slow, error prone, disruptive to services, and difficult to scale. For example, to perform an action such as software update on a group of virtual machines, one approach involves stopping service(s) provided by this virtual machine and taking the server machine hosting the virtual machine offline in order to manually update the virtual machine. This approach can be quite disruptive to the service(s) provided by the virtual machine and therefore is neither practical nor desirable. As the complexity of VM systems continues to increase, there is always room for improvements.